#include "util.h"
#include <SDL.h>

#define MAX(a,b) ( (a) > (b) ? (a) : (b))
#define MIN(a,b) ( (a) > (b) ? (b) : (a))

int collision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2)
{
	return (MAX(x1, x2) < MIN(x1 + w1, x2 + w2)) && (MAX(y1, y2) < MIN(y1 + h1, y2 + h2));
}

// 该函数有六个参数：src 坐标的 x 和 y，目标坐标的 x 和 y，以及两个浮点引用。
// 这个函数所做的是计算从一个点到另一个点的标准化步长。dx 或 dy 将始终为 1（或 -1），
// 而另一个可以是 -1 和 1 之间的任何值。这将用于告诉外星人的子弹他们需要走哪条路才能
// 到达目标被解雇了。
void calcSlope(int x1, int y1, int x2, int y2, float *dx, float *dy)
{
	// SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, 
	// 	"calcSlope %d %d %d %d %f %f", x1, y1, x2, y2, *dx, *dy);

	int steps = MAX(abs(x1 - x2), abs(y1 - y2));

	if (steps == 0)
	{
		*dx = *dy = 0;
		return;
	}

	*dx = (x1 - x2);
	*dx /= steps;

	*dy = (y1 - y2);
	*dy /= steps;
}